
import java.io.*;
import java.util.*;


public class PriorityQueueExample {

	static class Patient implements Comparable {

		public String name;
		public String problem;
		public int priority;
		public int number;

		public Patient(String _name, String _problem,
						int _priority, int _number) {
			name = _name;
			problem = _problem;
			priority = _priority;
			number = _number;
		}

		public String toString() {
			return "name: " + name + ", problem: " + problem;
		}

		public int compareTo(Object obj) {
			Patient p = (Patient)obj;
			if (priority < p.priority) {
				return 1;
			}
			else if (priority > p.priority) {
				return -1;
			}
			else {
				if (number < p.number) {
					return -1;
				}
				else if (number > p.number) {
					return 1;
				}
				else {
					return 0;
				}
			}
		}

		public boolean equals(Object obj) {
			if (obj != null && obj instanceof Patient) {
				return compareTo(obj) == 0;
			}
			return false;
		}
	}

	public static void main(String[] args) {
		PriorityQueue q = new TreePriorityQueue();
		int number = 0;
		
		BufferedReader input =
				new BufferedReader(new InputStreamReader(System.in));
		
		boolean done = false;
		while (!done) {
			System.out.print("\n? ");
			
			String cmd = null;
			try { cmd = input.readLine(); }
			catch (IOException e) { return; }

			StringTokenizer tok = new StringTokenizer(cmd);
			String verb = tok.nextToken();

			if (verb.equals("arrive")) {
				String name = tok.nextToken();
				String problem = tok.nextToken();
				int priority = Integer.parseInt(tok.nextToken());
				q.insert(new Patient(name, problem, priority, ++number));
			}
			else if (verb.equals("treat")) {
				if (q.isEmpty()) {
					System.out.println("No patients, take a break");
				}
				else {
					Patient patient = (Patient)q.deleteMin();
					System.out.println(patient);
				}
			}
			else if (verb.equals("exit")) {
				done = true;
			}
		}
	}

}
